package ch01.demo;

import com.sun.org.apache.xpath.internal.operations.Mod;

import java.lang.reflect.Modifier;

public class GetClassInfo {
    /**
     *
     * @param args
     */
    public static void main(String[] args) {
       Class clz=Person.class;      //获取Class实例
        String fullName=clz.getName();      //得到类的完全限定名
        String simpleName=clz.getSimpleName();      //得到类名
        System.out.println("以下是"+fullName+"类的基本信息");
        System.out.println("-------------------");

        //获取Person类所在的包
        Package pkg=clz.getPackage();       //得到包类
        System.out.println(simpleName+"定义在:"+pkg.getName()+"包中");
        System.out.println("--------------------");

        //获得此对象所表示的实体(类、接口、基本类型或void)的超类的class
        //如果此对象表示object类、一个接口、一个基本类型或void，则返回null
        //如果此对象表示一个数组类，则返回表示该object类的Class对象
        Class superClass=clz.getSuperclass();   //父类
        System.out.println(simpleName+"类的超类是:"+superClass.getName());
        System.out.println("--------------------");

        //获得此对象所表示的类或接口实现的接口
        //如果此对象表示一个不实现任何接口的类或接口，则此方法返回一个长度为0的数组
        //如果此对象表示一个基本类型或void，则此方法返回一个长度为0的数组
        Class[] interfaces=clz.getInterfaces();
        System.out.println(simpleName+"类所实现的接口:");
        for (Class c:interfaces){
            System.out.println("\t"+c.getName());
        }
        System.out.println("---------------------");
        int modifier=clz.getModifiers();        //获取Person类的实例的访问修饰符
        System.out.println(simpleName+"类的修饰符");
        if((modifier & Modifier.PUBLIC)==Modifier.PUBLIC)
            System.out.println("\t访问修饰符是:public");
        else
            System.out.println("\t访问修饰符是:default(package)");
        if((modifier & Modifier.FINAL)==Modifier.FINAL)
            System.out.println("\t这个类是final的");
        if((modifier & Modifier.ABSTRACT)==Modifier.ABSTRACT)
            System.out.println("\t这是一个抽象类");
        if((modifier & Modifier.INTERFACE)==Modifier.INTERFACE)
            System.out.println("\t这是一个接口");
        System.out.println("------------------");
    }
}
